import axios from 'axios'

// 导入 store 实例，获取 token
import store from '@/store'

// 导入 router 实例
import router from '@/router/index.js'

// 创建一个与axios用法完全一样的实例
const request = axios.create({
  // 全局根路径
  baseURL: 'http://www.liulongbin.top:3008'
})

// 定义请求拦截器
request.interceptors.request.use(config => {
  // 统一 为请求头写到 Authorization 字段
  const { token } = store.state.user
  if (token) {
    config.headers.Authorization = token
  }
  return config
}, error => {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
request.interceptors.response.use(response => {
  // 2xx 范围内的状态码都会触发该函数。
  // 对响应数据做点什么
  return response
}, error => {
  if (error.response.status === 401) {
    // 代表token过期
    // 1.清空vuex中的 token和userinfo
    store.commit('user/setToken', '')
    store.commit('user/setUserInfo', {})
    // 2.跳转到登录页
    router.replace('/login')
  }
  return Promise.reject(error)
})
export default request
